Лабораторная работа №11 "Интеграция подсистемы прерывания"

После реализации подсистемы прерывания, её необходимо интегрировать в процессорную систему. Для этого необходимо обновить модуль processor_core по схеме, приведённой на рис. 1:

../../.pic/Labs/lab_11_irq_integration/fig_01.drawio.svg

Рисунок 1. Интеграция подсистемы прерываний в ядро процессора.

Схема без выделения новых частей относительно старой версии модуля

../../.pic/Labs/lab_10_irq/fig_03.drawio.svg

Рисунок 2. Схема без выделения новых частей относительно старой версии модуля.

Задание

Интегрировать модули csr_controller и irq_controller в модуль processor_core. При этом у модуля processor_core будет обновлённый прототип (поскольку добавился вход irq_req_i и irq_ret_o):

module processor_core (
  input  logic        clk_i,
  input  logic        rst_i,

  input  logic        stall_i,
  input  logic [31:0] instr_i,
  input  logic [31:0] mem_rd_i,
  input  logic        irq_req_i,

  output logic [31:0] instr_addr_o,
  output logic [31:0] mem_addr_o,
  output logic [ 2:0] mem_size_o,
  output logic        mem_req_o,
  output logic        mem_we_o,
  output logic [31:0] mem_wd_o,
  output logic        irq_ret_o
);

Обновите описание создания модуля processor_core в модуле processor_system с учётом появившихся портов. Для этого создайте провода irq_req и irq_ret и подключите их к соответствующим входам processor_core. Другим концом эти провода не будут пока что ни к чему подключены — это изменится в ЛР№13.

В случае, если вы захотите расширить количество источников прерывания, вы можете выполнить вспомогательную ЛР№12.

Порядок выполнения работы

  1. Замените файл program.mem в Design Sources проекта новым файлом program.mem, приложенном в данной лабораторной работе. Данный файл содержит программу из листинга 1 ЛР№10.
  2. Интегрируйте модули csr_controller и irq_controller в модуль processor_core.
    1. Обратите внимание, что что в модуле processor_core появились новые входные и выходные сигналы: irq_req_i и irq_ret_o. Эти порты должны быть использованы при подключении processor_core в модуле processor_system.
      1. Ко входу irq_req_i должен быть подключён провод irq_req, другой конец которого пока не будет ни к чему подключён.
      2. К выходу irq_ret_o необходимо подключить провод irq_ret, который также пока не будет использован.
      3. Имена проводов irq_req и irq_ret должны быть именно такими, т.к. используются верификационным окружением при проверке данной лабораторной работы.
    2. Обратите внимание на то, что появилась константа imm_Z — это единственная константа ядра, которая расширяется нулями, а не знаковым битом.
  3. Проверьте модуль с помощью верификационного окружения, представленного в файле lab_11.tb_processor_system.sv.
    1. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня в Simulation Sources.
    2. Как и в случае с проверкой процессора архитектуры CYBERcobra, вам не будет сказано пройден тест или нет. Вам необходимо самостоятельно, такт за тактом проверить что процессор правильно выполняет описанные в Листинге 1 ЛР№10 инструкции (см. порядок выполнения задания ЛР№4). Для этого, необходимо сперва самостоятельно рассчитать что именно должна сделать данная инструкция, а потом проверить что процессор сделал именно это.
  4. Данная лабораторная работа не предполагает проверки в ПЛИС.